package timer

import (
	"context"
	"time"

	"gitee.com/doraemon1996/bunny/log"
)

var timer *Timer

func init() {
	timer = New(context.Background())
	log.ExitHandlerInsert(func() {
		timer.Stop()
	})
}

// 延时执行一次任务
//
//	duration单位为1毫秒
//	如果间隔时间小于1或者定时器已关闭,则返回0
//	间隔时间小于100毫秒,只能保证任务会执行,但是相对误差会随着间隔时间的缩小而变大
func Timeout(duration time.Duration, callback func()) uint64 {
	return timer.Timeout(duration, callback)
}

// 定时执行一次任务
//
//	timestamp单位为1毫秒
//	如果指定时间小于当前时间或者定时器已关闭,则返回0
//	间隔时间小于100毫秒,只能保证任务会执行,但是相对误差会随着间隔时间的缩小而变大
func Timing(timestamp int64, callback func()) uint64 {
	return timer.Timing(timestamp, callback)
}

// 间隔时间执行任务
//
//	duration单位为1毫秒
//	如果间隔时间小于1或者定时器已关闭,则返回0
//	间隔时间小于100毫秒,只能保证任务会执行,但是相对误差会随着间隔时间的缩小而变大
func Interval(duration time.Duration, callback func()) uint64 {
	return timer.Interval(duration, callback)
}

// 删除一个未执行任务
func Remove(taskID uint64) {
	timer.Remove(taskID)
}
